Projet Zuul de conception orientée objet en Java d'un jeu d'aventure
Forum des exercices du projet Zuul
Exercice 7.2.1
1) Comprendre une 1ère utilisation d'un objet Scanner dans la classe Parser de zuul-bad pour lire au clavier (scanner le clavier ligne par ligne) :
- System.in désigne le clavier (comme System.out désigne l'écran)
- Il faut créer un objet Scanner en lui passant le clavier en paramètre :
Scanner vScan = new Scanner( System.in ); - Pour pouvoir compiler, il faut indiquer au compilateur où se trouve la classe Scanner :
import java.util.Scanner; - Il faut créer une String pour contenir les caractères qui seront tapés au clavier :
String vLigneLue; - Ensuite, à chaque fois qu'on écrira l'instruction
vLigneLue = vScan.nextLine();
toute la ligne de caractères tapés au clavier sera stockée dans vLigneLue - En attendant que des caractères soient tapés au clavier, le programme reste bloqué. Il est donc indispensable de prévenir l'utilisateur de ce qu'on attend de lui, en affichant quelque chose comme "Veuillez taper une commande : " ou plus simplement "> "
2) Comprendre une 2ème utilisation d'un objet Scanner dans la classe Parser de zuul-bad pour analyser une String (scanner une chaîne de caractères mot par mot) :
- Il faut créer un nouvel objet Scanner en lui passant la String en paramètre :
Scanner vScan2 = new Scanner( vLigneLue ); - Pas de problème de compilation puisqu'on a déjà importé la classe Scanner.
- Pour savoir s'il y a un prochain mot à analyser dans la String, on utilise la fonction booléenne vScan2.hasNext() qui nous renvoie vrai ou faux, selon que vScan2 a ou non trouvé un mot dans la String.
- S'il en a trouvé un, on le récupère par l'instruction String vMot = vScan2.next();
- On peut ensuite recommencer pour voir s'il y a un second mot, et ainsi de suite ...
Juste pour être sur, quand vous parlez de la classe " Scanner " vous voulez dire
" Parser " c'est ça ?
Non ! Toute les explications ci-dessus montrent bien l'utilisation de la classe Scanner (qui est présente dans le JDK) et non de la classe Parser (qui a été inventée pour le jeu Zuul).
On peut dire qu'il y a un rapport entre les deux, puisque dans Zuul, la classe Parser déclare puis utilise un objet de la classe Scanner (pour lire les commandes tapées au clavier).
Bonjour,
Je ne saisis pas très bien la différence entre la classe Scanner et la classe Parser.
J'ai cependant compris que la classe Parser permet de lire le texte entré par l'utilisateur et de le transformer en commande et que la classe Scanner
permet à l'utilisateur de communiquer avec l'application, de lire les
données tapées par l'utilisateur dans la console et de les lier aux
méthodes concernées.
Pouvez vous m'éclairer sur la différence "d'action" entre ces deux classes ?
Cordialement,
- La classe Scanner est une classe du JDK (sa Javadoc est fournie par les concepteurs de Java).
Elle peut servir à lire les mots ou lignes tapé(e)s au clavier, ou bien
à lire des mots ou lignes dans un fichier de texte présent sur le
disque dur, ou bien à extraire les différents mots présents dans une
longue String.
- La classe Parser est une classe du jeu Zuul (voir sa Javadoc fournie par les auteurs du livre). Elle n'a que 2 attributs (dont un Scanner qui lit sur le clavier) et une seule méthode qui renvoit un objet Command (comprenant les 2 mots tapés par le joueur).
La classe Parser (du jeu Zuul) utilise donc la classe Scanner (du JDK) pour lire ce qu'a tapé le joueur et le mettre en forme (en séparant les 2 mots) pour être utilisé plus facilement par le reste du jeu.
N'hésitez pas à poser des questions plus précises si les explications ci-dessus ne vous suffisent pas.
Réseaux sociaux